package org.ehe.system.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.ehe.common.sensitive.annotation.Sensitive;
import org.ehe.common.sensitive.core.SensitiveStrategy;
import org.ehe.common.translation.annotation.Translation;
import org.ehe.common.translation.constant.TransConstant;
import org.ehe.system.domain.HrEmployee;
import org.ehe.system.domain.SysPost;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 员工主信息视图对象 hr_employee
 *
 * @author zhangnn
 */
@Data
@AutoMapper(target = HrEmployee.class)
public class HrEmployeeVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 员工ID
     */
    private Long employeeId;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 角色IDS
     */
    private List<SysRoleVo> roleVos;
    /**
     * 工号
     */
    private String employeeNo;

    /**
     * 姓名
     */
    private String employeeName;

    /**
     * 手机号
     */
    private String mobile;
    /**
     * 性别
     */
    private String sex;
    /**
     * 入职时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date entryDate;

    /**
     * 部门ID
     */
    private Long deptId;

    /**
     * 部门名称
     */
    @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "deptId")
    private String deptName;

    /**
     * 岗位ID
     */
    private List<SysPostVo> postVos;

    /**
     * 岗位名称
     */
    private String postName;

    /**
     * 合同类型（1固定期限 2无固定期限 3完成一定工作任务 4劳务合同）
     */
    private String contractType;

    /**
     * 合同开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date contractStartDate;

    /**
     * 合同结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date contractEndDate;

    /**
     * 合同期限（月）
     */
    private Integer contractDuration;

    /**
     * 薪资等级
     */
    private String salaryLevel;

    /**
     * 试用期（月）
     */
    private Integer probationPeriod;

    /**
     * 试用期结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date probationEndDate;

    /**
     * 员工状态（1在职 2试用 3离职 4退休）
     */
    private String employeeStatus;

    /**
     * 身份证号
     */
    @Sensitive(strategy = SensitiveStrategy.ID_CARD)
    private String idCard;

    /**
     * 学历
     */
    private String education;

    /**
     * 专业
     */
    private String major;

    /**
     * 毕业学校
     */
    private String graduationSchool;

    /**
     * 毕业时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date graduationDate;

    /**
     * 紧急联系人
     */
    private String emergencyContact;

    /**
     * 紧急联系电话
     */
    @Sensitive(strategy = SensitiveStrategy.PHONE)
    private String emergencyPhone;

    /**
     * 籍贯
     */
    private String nativePlace;

    /**
     * 居住地址
     */
    private String residenceAddress;

    /**
     * 银行账号
     */
    @Sensitive(strategy = SensitiveStrategy.BANK_CARD)
    private String bankAccount;

    /**
     * 开户银行
     */
    private String bankName;

    /**
     * 社保账号
     */
    private String socialSecurityNo;

    /**
     * 公积金账号
     */
    private String providentFundNo;

    /**
     * 离职日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date leaveDate;

    /**
     * 离职原因
     */
    private String leaveReason;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    private List<HrEmployeeFamilyVo> familyVos;
    private List<HrEmployeeAttachmentVo> attachmentVos;

}
